home *** CD-ROM | disk | FTP | other *** search
/ Java Primer Plus / Java Primer Plus (Waite Group Proess)(1996).iso / chapter13 / javastand.java < prev    next >
Text File  |  1995-12-31  |  6KB  |  253 lines

  1.     import java.awt.*;
  2.  
  3.  
  4.  
  5.     class javastand {
  6.  
  7.     static public void main(String args[]) {
  8.  
  9.       MyFrame F = new MyFrame();
  10.     }
  11.     }
  12.  
  13.     class MyFrame extends java.awt.Frame {
  14.  
  15.     static Rectangle DrawSize;
  16.     MyWidgets WControls;
  17.     MyColors ColorControls;
  18.  
  19.     /* The init of the Applet */
  20.     MyFrame() {
  21.        DrawSize = bounds();
  22.            setLayout(new BorderLayout()); 
  23.  
  24.        /* Setup the Canvas */
  25.            MyCanvas c = new MyCanvas(); 
  26.  
  27.            add("North", WControls = new MyWidgets(c)); 
  28.  
  29.        /* Add controls to the bottom of the applet */
  30.            add("Center", c); 
  31.            add("South", ColorControls = new MyColors(c)); 
  32.     pack();
  33.     resize(500,200);
  34.     show();
  35.           ColorControls.enable();
  36.           WControls.enable(); 
  37.  
  38.      }
  39.  
  40.     public boolean handleEvent(Event E) {
  41.       if (E.id == Event.WINDOW_DESTROY) 
  42.          System.exit(0);
  43.       return false;
  44.     }
  45.  
  46.     }
  47.  
  48.     /* Creating a Canvas Class */
  49.     class MyCanvas extends Canvas {
  50.  
  51.     /* The x,y coordinates, height & width */
  52.       int drawX,drawY,drawH,drawW;
  53.       String mt;
  54.  
  55.     /*  Set these to make the code more readable */
  56.  
  57.     final int _RESET      = 0; //reset drawing field
  58.     final int _RECTANGLE  = 1; 
  59.     final int _FILLEDRECT = 2;
  60.     final int _CIRCLE     = 3;
  61.     final int _FILLEDCIRC = 4;
  62.     final int _LINE       = 5;
  63.     final int _TEXT       = 6;
  64.  
  65.     /* current drawing color */
  66.     Color drawCol = Color.black;
  67.  
  68.     /* current drawing mode  */
  69.     int drawAct = _LINE;
  70.  
  71.  
  72.     /* The following is the main drawing routine  */
  73.     /* of the applet. There is no persistance of  */
  74.     /* drawn objects, so if the appletis obscured */
  75.     /* and then brought front again, only the     */
  76.     /* most recently drawn object will be redrawn */
  77.  
  78.     public void paint(Graphics g) {
  79.  
  80.        g.setColor(Color.lightGray); 
  81.        Rectangle r = bounds();
  82.        if (drawAct == _RESET)
  83.         g.fillRect(0,0,r.width,r.height); 
  84.        else {
  85.            g.fillRect(0,0,80,15); 
  86.         g.setColor(Color.black);
  87.         g.drawRect(0,0,80,15); 
  88.        }
  89.  
  90.        g.setColor(Color.black);
  91.        g.drawString("JavaDraw",r.width/2-20,15); 
  92.  
  93.        g.drawRect(0,0,r.width-1,r.height-1); 
  94.  
  95.        g.setColor(drawCol);
  96.  
  97.       /* perform the selected drawing routine */
  98.        switch (drawAct) { 
  99.  
  100.           case _RECTANGLE  : g.drawRect(drawX,drawY,drawW, drawH);
  101.                        g.drawString("Rectangle",0,10);
  102.                    break;
  103.           case _FILLEDRECT : g.fillRect(drawX,drawY,drawW, drawH);
  104.                        g.drawString("Fill Rectangle",0,10);
  105.                    break;
  106.           case _CIRCLE     : g.drawOval(drawX,drawY,drawW,drawH);
  107.                        g.drawString("Circle",0,10);
  108.                   break;
  109.           case _LINE       : g.drawLine(drawX,drawY,drawW,drawH);
  110.                        g.drawString("Line",0,10);
  111.                    break;
  112.           case _FILLEDCIRC : g.fillOval(drawX,drawY,drawW,drawH);
  113.                        g.drawString("fill Circle",0,10);
  114.                    break;
  115.           case _TEXT       : g.drawString(mt,drawX,drawY);
  116.                    g.drawString(mt,0,10);
  117.                   break;
  118.        }
  119.     } 
  120.  
  121.     /* standard overridden update */
  122.     public void update(Graphics g) { paint(g); }
  123.  
  124.     /* set dimensions to zero */
  125.     public void redraw() {
  126.           drawX = drawY = drawW = drawH = 0;
  127.           repaint();
  128.     }
  129.  
  130.     /* Mouse Handling */
  131.     public boolean mouseDown(Event e, int x, int y) {
  132.            drawX=x;
  133.         drawY=y;
  134.         return true;
  135.     }
  136.  
  137.     public boolean mouseUp(Event e, int x, int y) {
  138.  
  139.        if(drawAct == _LINE) {
  140.         drawW=x;
  141.         drawH=y;
  142.         repaint();
  143.         return true;
  144.        }
  145.          
  146.        /* Not a line, extract the coordinates */
  147.  
  148.        drawW = java.lang.Math.abs(x - drawX);
  149.        if (x < drawX) drawX = x;
  150.  
  151.        drawH = java.lang.Math.abs(y - drawY);
  152.        if (y < drawY) drawY = y;
  153.  
  154.        repaint(); //draw our new object
  155.        return true;
  156.       }
  157.     }
  158.  
  159.     /* Setup the Widgets */
  160.     class MyWidgets extends Panel {
  161.  
  162.     MyCanvas canvas; 
  163.     TextField mt;
  164.  
  165.     public MyWidgets(MyCanvas canvas) {
  166.        this.canvas = canvas;
  167.        add(mt = new TextField("",10));
  168.        add(new Button("Text"));
  169.        add(new Button("Line"));
  170.        add(new Button("Rect"));
  171.        add(new Button("FillRect"));
  172.        add(new Button("Circle"));
  173.        add(new Button("FillCircle"));
  174.        add(new Button("Reset"));
  175.     }
  176.  
  177.     /* grab events and look for button events */
  178.     public boolean action(Event ev, Object arg) {
  179.  
  180.        if(ev.target instanceof Button) {
  181.           canvas.drawAct = whichact((String)arg);
  182.           if (canvas.drawAct == canvas._TEXT)
  183.         canvas.mt = mt.getText();
  184.           if (canvas.drawAct == canvas._RESET)
  185.         canvas.repaint();
  186.  
  187.           canvas.redraw(); 
  188.           return true;
  189.        } 
  190.        return false;
  191.     }
  192.  
  193.  
  194.     private int whichact(String T) {
  195.  
  196.           if (T.equals("Text"))       return canvas._TEXT;
  197.           if (T.equals("Reset"))        return canvas._RESET;
  198.           if (T.equals("Line"))       return canvas._LINE;
  199.           if (T.equals("Rect"))       return canvas._RECTANGLE;
  200.           if (T.equals("FillRect"))   return canvas._FILLEDRECT;
  201.           if (T.equals("Circle"))     return canvas._CIRCLE;
  202.           if (T.equals("FillCircle")) return canvas._FILLEDCIRC;
  203.  
  204.           return -1;
  205.           }
  206.     }
  207.  
  208.  
  209.  
  210. class MyColors extends Panel {
  211.  
  212.         MyCanvas canvas; //canvas that calls this
  213.  
  214.  
  215.         public MyColors(MyCanvas canvas) {
  216.            this.canvas = canvas; //set canvas to calling class
  217.            add(new Button("Blue"));
  218.            add(new Button("Red"));
  219.            add(new Button("Yellow"));
  220.            add(new Button("Black"));
  221.            add(new Button("Green"));
  222.            add(new Button("Gray"));
  223.     }
  224.  
  225.         public boolean action(Event ev, Object arg) {
  226.            if(ev.target instanceof Button) {
  227.               String label = (String)arg;
  228.  
  229.           canvas.drawCol = whichcol((String)arg);
  230.  
  231.           canvas.redraw(); 
  232.         //calls paint for new color to appear in
  233.         //tool selection field
  234.               return true;
  235.            }
  236.            return false;
  237.         }
  238.  
  239.     private Color whichcol(String T) {
  240.               if (T.equals("Blue"))   return Color.blue;
  241.               if (T.equals("Black"))  return Color.black;
  242.               if (T.equals("Yellow")) return Color.yellow;
  243.               if (T.equals("Red"))    return Color.red;
  244.               if (T.equals("Green"))  return Color.green;
  245.               if (T.equals("Gray"))   return Color.gray;
  246.           return null;
  247.        }
  248.     
  249.  
  250. }
  251.  
  252.  
  253.